﻿using System;
using System.ComponentModel;
using System.Linq;
using GSQ.BusinessEntities;
using GSQ.BusinessLogic;
using GSQ.Rpt_s;

namespace UIapp.Dialogos
{
    public partial class frmAjustesInventario : Plantillas.frmDialogPlantilla, Interfaces.IPantalla
    {
        public frmAjustesInventario()
        {
            InitializeComponent();
            Inicializar();
            this.cmbTipoAjuste.DisplayMember = "TIPO";
            this.cmbTipoAjuste.ValueMember = "ID";
            this.cmbTipoAjuste.DataSource = new AjustesInventarioBL().GetAjustesTipos();
            this.ctrAgregarProductos1.EditCosto = false;
            this.ctrAgregarProductos1.EditDescuento = false;
            this.ctrAgregarProductos1.AllowCantidadCero = true;
            this.ctrAgregarProductos1.COSTO_PRECIO = Controles.ctrAgregarProductos.CostoPrecio.Costo;

        }

        #region Variables
        public AJUSTES_INV newEntity;
        bool entityError = false;
        #endregion

        #region Implementacion IPantalla
        public int ComandosSoportados
        {
            get { return 0; }
        }

        public void Nuevo()
        {
            throw new NotImplementedException();
        }

        public void Modificar()
        {
            throw new NotImplementedException();
        }

        public void Eliminar()
        {
            throw new NotImplementedException();
        }

        public void Refrescar()
        {
            throw new NotImplementedException();
        }

        public void Buscar()
        {
            throw new NotImplementedException();
        }

        public void AgregarProducto(Controles.TransferEntity tranferEntity)
        {
            foreach (AJUSTES_INV_DETALLES t in this.newEntity.AJUSTES_INV_DETALLES)
            {
                if (t.ID_PRODUCTO == tranferEntity.PRODUCTOS.ID)
                {
                    Comun.ShowInMainMessage("Producto " + tranferEntity.PRODUCTOS.CODIGO + " previamente agregado.");
                    return;
                }
            }

            AJUSTES_INV_DETALLES ajusteInvDetalle = new AJUSTES_INV_DETALLES
            {
                ID = 0,
                ID_PRODUCTO = tranferEntity.PRODUCTOS.ID,
                COSTO = tranferEntity.COSTO,
                PRECIO = tranferEntity.PRODUCTOS.PRECIO,
                CANTIDAD_AJUSTADA = tranferEntity.CANTIDAD,
                EXISTENCIA_PREVIA = tranferEntity.PRODUCTOS.EXISTENCIA,
                DESCRIPCIONES = tranferEntity.PRODUCTOS.DESCRIPCIONES,
                MEDIDAS = tranferEntity.PRODUCTOS.MEDIDAS,
                PRODUCTOS = tranferEntity.PRODUCTOS
            };
            if (ajusteInvDetalle.IsValid())
            {
                this.newEntity.AJUSTES_INV_DETALLES.Add(ajusteInvDetalle);
                this.bindingSource.DataSource = this.newEntity.AJUSTES_INV_DETALLES.ToList();
            }
            else
                Comun.ShowMessage(ajusteInvDetalle);
        }
        #endregion

        #region Tratamiento de eventos

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                this.backgroundWorker.RunWorkerAsync();
                Comun.ShowLoadingFRM();
            }
            catch (Exception ex)
            {
                Comun.ShowMessage(ex);
            }
        }

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            this.Guardar();
        }

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            Comun.CloseLoadingFRM();
            if (e.Error != null)
                Comun.ShowMessage(e.Error);
            else if (this.entityError)
                return;
            else
            {
                decimal  i = this.newEntity.ID;
                Inicializar();
                Comun.ShowInMainMessage("Datos guardados correctamente...");                
                Plantillas.frmReportPreview frm = new Plantillas.frmReportPreview();
                frm.crystalReportViewer1.ReportSource = new Reportes().GetAjusteInvetario(i);
                // frm.MdiParent = this.MdiParent;
                frm.Show();
                this.DialogResult = System.Windows.Forms.DialogResult.OK;                
                this.cmbTipoAjuste.Focus();
            }
        }

        private void radGridView_UserDeletingRow(object sender, Telerik.WinControls.UI.GridViewRowCancelEventArgs e)
        {
            this.newEntity.AJUSTES_INV_DETALLES.Remove((AJUSTES_INV_DETALLES)this.radGridView.CurrentRow.DataBoundItem);
        }

        private void cmbTipoAjuste_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
        {
            if (this.cmbTipoAjuste.SelectedItem != null)
                this.newEntity.ID_TIPO = (decimal)this.cmbTipoAjuste.SelectedItem.Value;
        }
        #endregion

        #region Metodos auxiliares
        public void BindControls()
        {

        }

        private void Guardar()
        {
            if (newEntity.IsValid())
            {
                this.newEntity.ACTIVO = true;
                new AjustesInventarioBL().Insert(this.newEntity);
                this.entityError = false;
            }
            else
            {
                this.entityError = true;
                Comun.ShowMessage(newEntity);
            }
        }

        private void Inicializar()
        {
            this.newEntity = new AJUSTES_INV();
            this.bindingSource.DataSource = this.newEntity.AJUSTES_INV_DETALLES;
            if (this.cmbTipoAjuste.SelectedItem != null)
                this.newEntity.ID_TIPO = (decimal)this.cmbTipoAjuste.SelectedItem.Value;
            if (Comun.usuario != null)
            {
                this.newEntity.ID_USUARIO = Comun.usuario.ID;
                this.newEntity.USUARIOS = Comun.usuario;
            }
            this.newEntity.FECHA = DateTime.Now;

        }
        #endregion
    }
}
